www.gusucode.com > VC 2D游戏编辑器-源码程序 > VC 2D游戏编辑器-源码程序/code/game_Source/loadgame.cpp
//Download by http://www.NewXing.com #include <ddraw.h> #include "main.h" #include "LoadGame.h" #include "newgame.h" #include "savegame.h" void CALLBACK LoadGameTimer(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime); void LoadGameRefreshScreen(); extern void JudgeMousePlace_save( ); extern void DrawGameInfo(int i); extern void ShowGameInfo(int i); extern RLEBITHEADER * SaveGameRLE; extern RLEBITHEADER * selete_SaveRLE; extern RLEBITHEADER * unselete_SaveRLE; extern RLEBITHEADER * scrollRLE; extern BMPHEADER * gameImage[4]; extern GameSave * gameOldSaved[4]; extern int iScroll; extern int id_game; extern int iCurrentStartN; //当前开始的存档号 bool LoadGameSelect = false; int LoadGameSelectNum = 0; int LoadGame( ) { MSG msg; LoadGameSelect = false; SaveGameRLE = LoadRleImage("pic\\dialog\\dialog.ret"); selete_SaveRLE = LoadRleImage("pic\\dialog\\select_Save.ret"); unselete_SaveRLE = LoadRleImage("pic\\dialog\\unselect_Save.ret"); scrollRLE = LoadRleImage("pic\\dialog\\scroll.ret"); int i; iScroll = 0; iCurrentStartN = 0; for(i = 0; i < 4; i++) { gameOldSaved[i] = NULL; DrawGameInfo(i); } long lW, lH; //显示对话框 lW = (SCREEN_WIDTH-SaveGameRLE->bfWidth)>>1; lH = (SCREEN_HEIGHT-SaveGameRLE->bfHeight)>>1; ShowRleImage_NR(lW, lH, 0, 0, SaveGameRLE, pS[SBuffer], SP[SBuffer]); //显示档案记录 ShowRleImage_NR(lW+26, lH+26, 0, 0, unselete_SaveRLE, pS[SBuffer], SP[SBuffer]); ShowRleImage_NR(lW+26, lH+139, 0, 0, unselete_SaveRLE, pS[SBuffer], SP[SBuffer]); ShowRleImage_NR(lW+26, lH+252, 0, 0, unselete_SaveRLE, pS[SBuffer], SP[SBuffer]); ShowRleImage_NR(lW+26, lH+365, 0, 0, unselete_SaveRLE, pS[SBuffer], SP[SBuffer]); //存储当前图形 rect1 = MakeRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); FastBlt(0, 0, rect1, pS[SBack], pS[SBuffer], SP[SBack], SP[SBuffer], false, 0); cursor = 0; PA_SAFE_DELETE(mouseRLE); mouseRLE = LoadRleImage("Pic\\cursor\\cursor01.ret"); cursorT = 4; SetTimer(hwnd, 1, 50, LoadGameTimer); while(!LoadGameSelect) { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if ( msg.message==WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } else { LoadGameRefreshScreen( ); } } KillTimer(hwnd, 1); if(LoadGameSelectNum != 0xffff) { int iN = i+iScroll; char filename[10]; char pstrFileName[MAX_PATH]; if(role == NULL) role = new ROLE( ); role->LoadFromRole(gameOldSaved[id_game-1]->GameRole); GetCurrentDirectory(MAX_PATH,pstrFileName); strcat(pstrFileName, "\\save\\"); itoa(id_game-1, filename, 10); strcat(pstrFileName, filename); strcat(pstrFileName, ".save"); FILE *file=fopen(pstrFileName,"rb"); if(file) { if(MainScript.Script != NULL) PA_SAFE_DELETE(MainScript.Script); fread(&MainScript, sizeof(CScript), 1, file); for(i = 0; i < 10; i++) { if(Script_Child[i].Script != NULL) { PA_SAFE_DELETE(Script_Child[i].Script); } fread(&Script_Child[i], sizeof(CScript), 1, file); Script_Child[i].Script = NULL; } char MapName[10][MAX_PATH]; fread(MapName[0], MAX_PATH*sizeof(char), 1, file) ; for(i = 0; i < 9; i++) { fread(MapName[i+1], MAX_PATH*sizeof(char), 1, file) ; } Zoetic = new CZoetic; fread(&Zoetic->ZoeticHeader, sizeof(_ZoeticHeader), 1, file); Zoetic->ZoeticLink = new _ZoeticLink[Zoetic->ZoeticHeader.nMagicN]; Zoetic->dx = new int[Zoetic->ZoeticHeader.nMagicN]; Zoetic->dy = new int[Zoetic->ZoeticHeader.nMagicN]; Zoetic->MainStatus = new int[Zoetic->ZoeticHeader.nMagicN]; Zoetic->FootStatus = new int[Zoetic->ZoeticHeader.nMagicN]; Zoetic->face = new int[Zoetic->ZoeticHeader.nMagicN]; Zoetic->Waittime = new int[Zoetic->ZoeticHeader.nMagicN]; Zoetic->MagicUsing = new MagicIsUsing[Zoetic->ZoeticHeader.nMagicN]; Zoetic->findpath = new FINDPATH_A4[Zoetic->ZoeticHeader.nMagicN]; Zoetic->ZoeticTime = new DWORD[Zoetic->ZoeticHeader.nMagicN]; Zoetic->under_fireT = new DWORD[Zoetic->ZoeticHeader.nMagicN]; Zoetic->strengthSearch = new WORD[Zoetic->ZoeticHeader.nMagicN]; Zoetic->newx_Zoetic = new float[Zoetic->ZoeticHeader.nMagicN]; Zoetic->newy_Zoetic = new float[Zoetic->ZoeticHeader.nMagicN]; Zoetic->WalkNumber = new int[Zoetic->ZoeticHeader.nMagicN]; memset(Zoetic->Waittime, -1, Zoetic->ZoeticHeader.nMagicN*sizeof(int)); memset(Zoetic->strengthSearch, 0, Zoetic->ZoeticHeader.nMagicN*sizeof(WORD)); memset(Zoetic->newx_Zoetic, 0, Zoetic->ZoeticHeader.nMagicN*sizeof(float)); memset(Zoetic->newy_Zoetic, 0, Zoetic->ZoeticHeader.nMagicN*sizeof(float)); memset(Zoetic->WalkNumber, -1, Zoetic->ZoeticHeader.nMagicN*sizeof(int)); memset(Zoetic->ZoeticTime, 0, Zoetic->ZoeticHeader.nMagicN*sizeof(DWORD)); memset(Zoetic->under_fireT, 0, Zoetic->ZoeticHeader.nMagicN*sizeof(DWORD)); int * iLink = new int[Zoetic->ZoeticHeader.nMagicN]; fread(Zoetic->MainStatus, Zoetic->ZoeticHeader.nMagicN*sizeof(int), 1, file); fread(iLink, Zoetic->ZoeticHeader.nMagicN*sizeof(int), 1, file); fread((char *)Zoetic->ZoeticLink,Zoetic->ZoeticHeader.nMagicN*sizeof(_ZoeticLink), 1, file); fclose(file); if(MainScript.Script != NULL) MainScript.LoadScript(); for(i = 0; i < 10; i++) { Script_Child[i].LoadScript(); } for(i = 0; i < 9; i++) { strcpy(pstrFileName, "map\\"); strcat(pstrFileName, MapName[i+1]); Map_Child[i].LoadMap(i, MapName[i+1], pstrFileName); if(!strcmp(MapName[0], MapName[i+1])) Map = &Map_Child[i]; } _ZoeticLink * ZoeticLink; for(i = 0; i < (int)Zoetic->ZoeticHeader.nMagicN; i++) { Zoetic->dx[i] = Zoetic->ZoeticLink[i].dCurrent_x; Zoetic->dy[i] = Zoetic->ZoeticLink[i].dCurrent_y; Zoetic->Waittime[i] = -1; Zoetic->FootStatus[i] = -1; Zoetic->face[i] = 0; memset(Zoetic->findpath[i].pathX, -1, TABLE_X*TABLE_Y*sizeof(int)); memset(Zoetic->findpath[i].pathY, -1, TABLE_X*TABLE_Y*sizeof(int)); } for(i = 0; i < (int)Zoetic->ZoeticHeader.nMagicN; i++) { if(iLink[i] == 0xffff) { if(i == 0) { Zoetic->ZoeticLinkHeader = NULL; } else { ZoeticLink->Next = NULL; } break; } else { if(i == 0) { Zoetic->ZoeticLinkHeader = &Zoetic->ZoeticLink[iLink[i]]; ZoeticLink = Zoetic->ZoeticLinkHeader; ZoeticLink->Back = NULL; } else { ZoeticLink->Next = &Zoetic->ZoeticLink[iLink[i]]; Zoetic->ZoeticLink[iLink[i]].Back = ZoeticLink; ZoeticLink = ZoeticLink->Next; } } } if(i != 0) Zoetic->ZoeticLink[iLink[i-1]].Next = NULL; P_SAFE_DELETE(iLink); } PA_SAFE_DELETE(SaveGameRLE); PA_SAFE_DELETE(selete_SaveRLE); PA_SAFE_DELETE(unselete_SaveRLE); PA_SAFE_DELETE(scrollRLE); for(i = 0; i < 4; i++) { P_SAFE_DELETE(gameOldSaved[i]); PA_SAFE_DELETE(gameImage[i]); } gWPPStack.Push(lpWndProc); lpWndProc=NewGameMessageProc; LoadGameSelectNum = StartGame( ); gWPPStack.Pop(lpWndProc); } else { PA_SAFE_DELETE(SaveGameRLE); PA_SAFE_DELETE(selete_SaveRLE); PA_SAFE_DELETE(unselete_SaveRLE); PA_SAFE_DELETE(scrollRLE); for(i = 0; i < 4; i++) { PA_SAFE_DELETE(gameOldSaved[i]); PA_SAFE_DELETE(gameImage[i]); } } return LoadGameSelectNum; } LRESULT WINAPI LoadGameMessageProc(HWND hwnd, UINT message,WPARAM wParam, LPARAM lParam) { switch(message) { case WM_SETCURSOR: SetCursor(NULL); break; case WM_KEYDOWN: switch(wParam) { case VK_ESCAPE: LoadGameSelectNum = 0xffff; LoadGameSelect = true; break; default: return 1; } break; case WM_LBUTTONDOWN: curpos.x = LOWORD (lParam); curpos.y = HIWORD (lParam); JudgeMousePlace_save( ); switch(id_game) { case 0x01: case 0x02: case 0x03: case 0x04: LoadGameSelectNum = id_game+iScroll; LoadGameSelect = true; break; case 0x101: if(iScroll >0) { iScroll --; } break; case 0x102: if(iScroll < 16) { iScroll ++; } break; } break; case WM_MOUSEMOVE: curpos.x = LOWORD (lParam); curpos.y = HIWORD (lParam); if(curpos.x > SCREEN_WIDTH - 1 ) { curpos.x = SCREEN_WIDTH-1; SetCursorPos(curpos.x, curpos.y); } if(curpos.y > SCREEN_HEIGHT - 1) { curpos.y = SCREEN_HEIGHT-1; SetCursorPos(curpos.x, curpos.y); } JudgeMousePlace_save( ); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 1; } void LoadGameRefreshScreen() { long lW, lH; lW = (SCREEN_WIDTH-SaveGameRLE->bfWidth)>>1; lH = (SCREEN_HEIGHT-SaveGameRLE->bfHeight)>>1; rect1 = MakeRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); FastBlt(0, 0, rect1, pS[SBuffer], pS[SBack], SP[SBuffer], SP[SBack], false, 0); switch(id_game) { case 0x01: //当鼠标当前第一个存档时 ShowRleImage_NR(lW+26, lH+26, 0, 0, selete_SaveRLE, pS[SBuffer], SP[SBuffer]); break; case 0x02: //当鼠标当前第二个存档时 ShowRleImage_NR(lW+26, lH+139, 0, 0, selete_SaveRLE, pS[SBuffer], SP[SBuffer]); break; case 0x03: //当鼠标当前第三个存档时 ShowRleImage_NR(lW+26, lH+252, 0, 0, selete_SaveRLE, pS[SBuffer], SP[SBuffer]); break; case 0x04: //当鼠标当前第四个存档时 ShowRleImage_NR(lW+26, lH+365, 0, 0, selete_SaveRLE, pS[SBuffer], SP[SBuffer]); break; } //显示存档信息 int i; if(iCurrentStartN != iScroll) { if(iCurrentStartN > iScroll) { switch(iCurrentStartN - iScroll) { case 1: P_SAFE_DELETE(gameOldSaved[3]); PA_SAFE_DELETE(gameImage[3]); gameOldSaved[3] = gameOldSaved[2]; gameImage[3] = gameImage[2]; gameOldSaved[2] = gameOldSaved[1]; gameImage[2] = gameImage[1]; gameOldSaved[1] = gameOldSaved[0]; gameImage[1] = gameImage[0]; gameOldSaved[0] = NULL; gameImage[0] = NULL; DrawGameInfo(0); break; case 2: P_SAFE_DELETE(gameOldSaved[3]); PA_SAFE_DELETE(gameImage[3]); P_SAFE_DELETE(gameOldSaved[2]); PA_SAFE_DELETE(gameImage[2]); gameOldSaved[3] = gameOldSaved[1]; gameImage[3] = gameImage[1]; gameOldSaved[2] = gameOldSaved[0]; gameImage[2] = gameImage[0]; gameOldSaved[1] = NULL; gameImage[1] = NULL; gameOldSaved[0] = NULL; gameImage[0] = NULL; DrawGameInfo(0); DrawGameInfo(1); break; case 3: P_SAFE_DELETE(gameOldSaved[3]); PA_SAFE_DELETE(gameImage[3]); P_SAFE_DELETE(gameOldSaved[2]); PA_SAFE_DELETE(gameImage[2]); P_SAFE_DELETE(gameOldSaved[1]); PA_SAFE_DELETE(gameImage[1]); gameOldSaved[3] = gameOldSaved[0]; gameImage[3] = gameImage[0]; gameOldSaved[0] = NULL; gameImage[0] = NULL; gameOldSaved[1] = NULL; gameImage[1] = NULL; gameOldSaved[2] = NULL; gameImage[2] = NULL; DrawGameInfo(0); DrawGameInfo(1); DrawGameInfo(2); break; default: for(i = 0; i < 4; i++) { DrawGameInfo(i); } break; } } else { switch(iScroll - iCurrentStartN) { case 1: P_SAFE_DELETE(gameOldSaved[0]); PA_SAFE_DELETE(gameImage[0]); gameOldSaved[0] = gameOldSaved[1]; gameImage[0] = gameImage[1]; gameOldSaved[1] = gameOldSaved[2]; gameImage[1] = gameImage[2]; gameOldSaved[2] = gameOldSaved[3]; gameImage[2] = gameImage[3]; gameOldSaved[3] = NULL; gameImage[3] = NULL; DrawGameInfo(3); break; case 2: P_SAFE_DELETE(gameOldSaved[0]); PA_SAFE_DELETE(gameImage[0]); P_SAFE_DELETE(gameOldSaved[1]); PA_SAFE_DELETE(gameImage[1]); gameOldSaved[0] = gameOldSaved[2]; gameImage[0] = gameImage[2]; gameOldSaved[1] = gameOldSaved[3]; gameImage[1] = gameImage[3]; gameOldSaved[2] = NULL; gameImage[2] = NULL; gameOldSaved[3] = NULL; gameImage[3] = NULL; DrawGameInfo(2); DrawGameInfo(3); break; case 3: P_SAFE_DELETE(gameOldSaved[0]); PA_SAFE_DELETE(gameImage[0]); P_SAFE_DELETE(gameOldSaved[1]); PA_SAFE_DELETE(gameImage[1]); P_SAFE_DELETE(gameOldSaved[2]); PA_SAFE_DELETE(gameImage[2]); gameOldSaved[0] = gameOldSaved[3]; gameImage[0] = gameImage[3]; gameOldSaved[1] = NULL; gameImage[1] = NULL; gameOldSaved[2] = NULL; gameImage[2] = NULL; gameOldSaved[3] = NULL; gameImage[3] = NULL; DrawGameInfo(1); DrawGameInfo(2); DrawGameInfo(3); break; default: for(i = 0; i < 4; i++) { DrawGameInfo(i); } break; } } iCurrentStartN = iScroll; } for(i = 0; i < 4; i++) { ShowGameInfo(i); } //显示滚动箭头 if(iScroll != 0) { if(id_game != 0x101) ShowRleImage_NR(lW+555, lH+180, 0, 0, scrollRLE, pS[SBuffer], SP[SBuffer]); else ShowRleImage_NR(lW+555, lH+180, 1, 0, scrollRLE, pS[SBuffer], SP[SBuffer]); } if(iScroll != 16) { if(id_game != 0x102) ShowRleImage_NR(lW+555, lH+259, 0, 1, scrollRLE, pS[SBuffer], SP[SBuffer]); else ShowRleImage_NR(lW+555, lH+259, 1, 1, scrollRLE, pS[SBuffer], SP[SBuffer]); } //显示鼠标 lW = mouseRLE->bfWidth/mouseRLE->bfWidthBitN; lH = mouseRLE->bfHeight/mouseRLE->bfHeightBitN; RECT rect3; rect3.left = 0; rect3.top = 0; rect3.right = curpos.x+lW > SCREEN_WIDTH?SCREEN_WIDTH-curpos.x:lW; rect3.bottom = curpos.y+lH > SCREEN_HEIGHT?SCREEN_HEIGHT-curpos.y:lH; ShowRleImage(curpos.x, curpos.y, cursor, 0, rect3, mouseRLE, pS[SBuffer], SP[SBuffer]); UpdateScreen(); } void CALLBACK LoadGameTimer(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime) { }